home *** CD-ROM | disk | FTP | other *** search
/ Young Minds / Young Minds Interactive CD-ROM.ISO / umoria / wands.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-07-28  |  4.1 KB  |  177 lines

  1. #include "constants.h"
  2. #include "config.h"
  3. #include "types.h"
  4. #include "externs.h"
  5.  
  6.  
  7. /* Wands for the aiming...                */
  8. aim()
  9. {
  10.   unsigned int i;
  11.   int j, k, l, chance;
  12.   int dir, item_val;
  13.   int dumy, y_dumy, x_dumy;
  14.   int redraw, ident;
  15.   register treasure_type *i_ptr;
  16.   register struct misc *m_ptr;
  17.  
  18.   redraw = FALSE;
  19.   reset_flag = TRUE;
  20.   if (inven_ctr > 0)
  21.     {
  22.       if (find_range(65, -1, &j, &k))
  23.     {
  24.       if (get_item(&item_val, "Aim which wand?", &redraw, j, k))
  25.         {
  26.           i_ptr = &inventory[item_val];
  27.           if (redraw)  draw_cave();
  28.           reset_flag = FALSE;
  29.           redraw = FALSE;
  30.           y_dumy = char_row;
  31.           x_dumy = char_col;
  32.           if (get_dir("Which direction?", &dir, &dumy, &y_dumy, &x_dumy))
  33.         {
  34.           if (py.flags.confused > 0)
  35.             {
  36.               msg_print("You are confused...");
  37.               do
  38.             {
  39.               dir = randint(9);
  40.             }
  41.               while (dir == 5);
  42.             }
  43.           i = i_ptr->flags;
  44.           ident = FALSE;
  45.           m_ptr = &py.misc;
  46.           chance = m_ptr->save + m_ptr->lev + int_adj() - i_ptr->level;
  47.           if (py.flags.confused > 0)
  48.             chance = chance / 2.0;
  49.           if (chance <= 0)  chance = 1;
  50.           if (randint(chance) < USE_DEVICE)
  51.             msg_print("You failed to use the wand properly.");
  52.           else if (i_ptr->p1 > 0)
  53.             {
  54.               (i_ptr->p1)--;
  55.               while (i != 0)
  56.             {
  57.               j = bit_pos(&i) + 1;
  58.               k = char_row;
  59.               l = char_col;
  60.               /* Wands                       */
  61.               switch(j)
  62.                 {
  63.                 case 1:
  64.              msg_print("A line of blue shimmering light appears.");
  65.                   light_line(dir, char_row, char_col);
  66.                   ident = TRUE;
  67.                   break;
  68.                 case 2:
  69.                   fire_bolt(1, dir, k, l, damroll("3d8"),
  70.                     "Lightning Bolt");
  71.                   ident = TRUE;
  72.                   break;
  73.                 case 3:
  74.                   fire_bolt(4, dir, k, l, damroll("4d8"),
  75.                     "Frost Bolt");
  76.                   ident = TRUE;
  77.                   break;
  78.                 case 4:
  79.                   fire_bolt(5, dir, k, l, damroll("6d8"),
  80.                     "Fire Bolt");
  81.                   ident = TRUE;
  82.                   break;
  83.                 case 5:
  84.                   ident = wall_to_mud(dir, k, l);
  85.                   break;
  86.                 case 6:
  87.                   ident = poly_monster(dir, k, l);
  88.                   break;
  89.                 case 7:
  90.                   ident = hp_monster(dir, k, l, -damroll("4d6"));
  91.                   break;
  92.                 case 8:
  93.                   ident = speed_monster(dir, k, l, 1);
  94.                   break;
  95.                 case 9:
  96.                   ident = speed_monster(dir, k, l, -1);
  97.                   break;
  98.                 case 10:
  99.                   ident = confuse_monster(dir, k, l);
  100.                   break;
  101.                 case 11:
  102.                   ident = sleep_monster(dir, k, l);
  103.                   break;
  104.                 case 12:
  105.                   ident = drain_life(dir, k, l);
  106.                   break;
  107.                 case 13:
  108.                   ident = td_destroy2(dir, k, l);
  109.                   break;
  110.                 case 14:
  111.                   fire_bolt(0, dir, k, l, damroll("2d6"),
  112.                     "Magic Missile");
  113.                   ident = TRUE;
  114.                   break;
  115.                 case 15:
  116.                   ident = build_wall(dir, k, l);
  117.                   break;
  118.                 case 16:
  119.                   ident = clone_monster(dir, k, l);
  120.                   break;
  121.                 case 17:
  122.                   ident = teleport_monster(dir, k, l);
  123.                   break;
  124.                 case 18:
  125.                   ident = disarm_all(dir, k, l);
  126.                   break;
  127.                 case 19:
  128.                   fire_ball(1, dir, k, l, 24, "Lightning Ball");
  129.                   ident = TRUE;
  130.                   break;
  131.                 case 20:
  132.                   fire_ball(4, dir, k, l, 32, "Cold Ball");
  133.                   ident = TRUE;
  134.                   break;
  135.                 case 21:
  136.                   fire_ball(5, dir, k, l, 48, "Fire Ball");
  137.                   ident = TRUE;
  138.                   break;
  139.                 case 22:
  140.                   fire_ball(2, dir, k, l, 8, "Stinking Cloud");
  141.                   ident = TRUE;
  142.                   break;
  143.                 case 23:
  144.                   fire_ball(3, dir, k, l, 40, "Acid Ball");
  145.                   ident = TRUE;
  146.                   break;
  147.                 case 24:
  148.                   i = 2 << (randint(23) - 1);
  149.                   break;
  150.                 default:
  151.                   break;
  152.                 }
  153.               /* End of Wands...                  */
  154.             }
  155.               if (ident)
  156.             identify(inventory[item_val]);
  157.               if (i_ptr->flags != 0)
  158.             {
  159.               m_ptr = &py.misc;
  160.               m_ptr->exp += ((i_ptr->level/m_ptr->lev) + 0.5);
  161.               prt_experience();
  162.             }
  163.               desc_charges(item_val);
  164.             }
  165.           else
  166.             msg_print("The wand has no charges left.");
  167.         }
  168.         }
  169.     }
  170.       else
  171.     msg_print("You are not carrying any wands.");
  172.     }
  173.   else
  174.     msg_print("But you are not carrying anything.");
  175.   if (redraw)  draw_cave();
  176. }
  177.